import "@site/src/languages/highlight";

# PhysicsWorld

**描述：**

&emsp;&emsp;表示游戏中的物理世界的类。

**类对象：**[PhysicsWorld Class](/docs/api/Class%20Object/PhysicsWorld)。

**继承自：**[Node](/docs/api/Class/Node)。

## query

**类型：** 函数。

**描述：**

&emsp;&emsp;查询与指定矩形区域相交的所有物理体。

**签名：**
```tl
query: function(self: PhysicsWorld, rect: Rect, handler: function(Body): boolean): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| rect | Rect | 要查询的矩形区域。 |
| handler | function | 对于查询中找到的每个物理体调用的函数。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 查询是否被中断，true 表示已中断，false 表示未中断。 |

**handler的定义：**


* **handler的参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| body | Body | 查询中找到的物理体。 |

* **handler的返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 是否继续查询更多物理体，返回 false 继续，true 停止。 |

## raycast

**类型：** 函数。

**描述：**

&emsp;&emsp;从起点发射一条射线穿过物理世界并找到与射线相交的物理体。

**签名：**
```tl
raycast: function(self: PhysicsWorld, start: Vec2, stop: Vec2, closest: boolean, handler: function(Body, point: Vec2, normal: Vec2): boolean): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| start | Vec2 | 射线的起点。 |
| stop | Vec2 | 射线的终点。 |
| closest | boolean | 是否在与射线相交的最近物理体上停止射线投射。将 closest 设置为 true 可以获得更快的射线投射搜索效率。 |
| handler | function | 对于射线投射中找到的每个物理体调用的函数。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 射线投射是否被中断，true 表示已中断，false 表示未中断。 |

**handler的定义：**


* **handler的参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| body | Body | 射线投射中找到的物理体。 |
| point | Vec2 | 射线与物理体相交的点。 |
| normal | Vec2 | 相交点处的法线向量。 |

* **handler的返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 是否继续投射射线以获得更多物理体，返回 true 停止，false 继续。 |

## setIterations

**类型：** 函数。

**描述：**

&emsp;&emsp;设置物理世界做物理模拟计算的速度迭代和位置迭代次数。

**签名：**
```tl
setIterations: function(self: PhysicsWorld, velocityIter: integer, positionIter: integer)
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| velocityIter | integer | 要执行的速度迭代次数。 |
| positionIter | integer | 要执行的位置迭代次数。 |

## setShouldContact

**类型：** 函数。

**描述：**

&emsp;&emsp;设置两个物理组是否会彼此碰撞。

**签名：**
```tl
setShouldContact: function(self: PhysicsWorld, groupA: integer, groupB: integer, contact: boolean)
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个物理对象分组。 |
| groupB | integer | 第二个物理对象分组。 |
| contact | boolean | 两个组是否应该彼此碰撞。 |

## getShouldContact

**类型：** 函数。

**描述：**

&emsp;&emsp;获取两个物理组是否会彼此碰撞。

**签名：**
```tl
getShouldContact: function(self: PhysicsWorld, groupA: integer, groupB: integer): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个物理对象分组。 |
| groupB | integer | 第二个物理对象分组。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 两个组是否会彼此碰撞。 |